package com.hhf.stream;

import java.util.Arrays;
import java.util.List;

import java.util.stream.Stream;

/**
 * @Author hhf
 * @Date 2024/6/16
 * @Description 流的三大部分(流是惰性的)
 * * 1.数据流 2.中间操作 3.终止操作
 */
public class StreamDemo2 {

    public static void main(String[] args) {


        //1.数据流
        // 1).创建流
        Stream<Integer> stream1 = Stream.of(1, 2, 3);
        Stream<Integer> stream2 = Stream.concat(stream1, Stream.of(4, 5, 6));
        Stream<Object> stream3 = Stream.builder().add(1).add(2).add(3).build();

        // 2).从集合中获取流(List,Set,Map)
        List<Integer> list = Arrays.asList(1, 2, 3);
        Stream<Integer> stream4 = list.stream();


        //2.中间操作
        //1). filter 过滤,挑出符合条件的数据
        //2). map   映射,一一映射 ,a->b
        //3). flatMap   扁平化映射,一对多映射

        //其他 distinct 去掉重复项  peek 不影响流的数据(进行一些log打印的操作)   sorted 排序  limit 限制  skip 略过  parallel 并行

        List<Person> personList = Arrays.asList(new Person("张三", 18),
                new Person("李四", 24),
                new Person("王五", 13));

        personList.stream()
                .filter(person -> {
                    return person.getAge() >= 18;
                })
                .map(Person::getName)
                .flatMap(element -> {
                    System.out.println("flatMap之前:" + element);
                    String[] s = element.split("");
                    return Arrays.stream(s);
                })
                .forEach(System.out::println);

    }
}

class Person {

    private String name;
    private Integer age;

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }


}
